---
sidebar_position: 4
---

# Пример 3. Статические члены класса

:::caution

Обратите внимание на то, что счетчик `total` используется для демонстрации жизненного цикла экземпляров класса `gamma`. Также он может быть полезен для отладки того, что вы правильно очищайте память после использования динамического выделения памяти (пара `new` и `delete`).

Поэтому:

- **Не используйте счетчик  `total`** для того, чтобы узнать текущее количество элементов в вашей БД.
- **Не используйте значение параметра `id`** для того, чтобы идентифицировать объект в вашей БД. Для идентификации используйте порядковый номер вашего объекта в БД и/или иную информацию, например, название объекта.

:::

```cpp
// overload.cpp  -  запись  структур в  файл перегруженной
// операцией <<
#include <iostream>

using namespace std;

class gamma {
private:
    static int total; //всего объектов
    //(только объявление)
    int id;  //ID текущего объекта
public:
    gamma() //конструктор без аргументов
    {
        total++; //увеличить счетчик объектов
        id = total; //id равен текущему значению total
        cout << "Создание ID " << id << endl;
    }

    ~gamma() //деструктор
    {
        total--;
        cout << "Удаление ID " << id << endl;
    }

    static void showtotal() // статическая функция
    {
        cout << "\nBcero: " << total << endl;
    }

    void showID() // нестатическая функция
    {
        cout << "\nID: " << id << endl;
    }
};

//---------------------------------
int gamma::total = 0;

int main() {
    gamma::showtotal();
    gamma g1;
    g1.showtotal();
    gamma g2;
    gamma g3;
    g3.showtotal();
    g1.showID();
    g2.showID();
    g3.showID();
    cout << "Конец программы" << endl;
    return 0;
}
```
